Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: engineMockとそのテストだけ実装する #2377

Draft
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

Hiroshiba
Copy link
Member

@Hiroshiba Hiroshiba commented Nov 23, 2024

内容

の実装です。e2eを目標としていたプルリクエストから派生しています。

とりあえず、Vuex内で使っているOpenAPI準拠のDefaulApiインターフェースを継承し、利用されている音声合成系の大体の機能を模倣した実装のプルリクエストです。
あとengineMockを利用した単体テストでのスナップショットテストだけ作ってます。

以下、engineMock/README.mdの転載です。

# エンジンモックのドキュメント

## 概要

通信を介さずに音声合成できるエンジンのモックです。

同じ入力には同じ出力を返し、別の入力には別の出力を返すようになっています。
また出力を見たときにUIや処理の実装の異常に気付けるように、ある程度直感に合う出力を返すよう努力されています。

例:音量を下げると音声が小さくなる、音程と周波数が一致する、など。

モックの実装は気軽に破壊的変更しても問題ありません。

## ビルド戦略

ブラウザ版でも使えるようにすべく、ソフトウェアにも組み込める形で実装されています。
ビルド時のモックエンジンの取り扱いポリシーはこんな感じです。

- 重い処理が一切実行されないようにする
  - 辞書の初期化、画像の読み込みなど
- なるべく重いファイルはビルドに含まれないようにする
  - 形態素解析の辞書ファイルやダミー画像など

## ファイル構成

- `talkModelMock.ts`
  - トーク用の音声クエリを作るまでの処理周り
- `singModelMock.ts`
  - ソング用の音声クエリを作るまでの処理周り
- `audioQueryMock.ts`
  - 音声クエリ周り
- `synthesisMock.ts`
  - 音声波形の合成周り
- `characterResourceMock.ts`
  - キャラ名や画像などのリソース周り
- `phonemeMock.ts`
  - 音素周り
- `manifestMock.ts`
  - エンジンのマニフェスト周り

関連 Issue

close #2144

その他

とりあえずこのプルリクエストで実装だけえいやで入れちゃいたいです。
(ものすごい巨大になっているのでおそらくテストできない・・・。)

モックが生み出す音声を聞いてみたい場合はこちらのプルリクエストをcheckoutして、.envをこんな感じに書いてみてください。

; mock版
VITE_DEFAULT_ENGINE_INFOS=`[
    {
        "name": "Mock Engine",
        "uuid": "00000000-0000-0000-0000-000000000000",
        "executionEnabled": false,
        "executionFilePath": "いらないはず",
        "executionArgs": [],
        "host": "http://mock"
    }
]`

気が向いたら後でブラウザ版で動くようなものを作ってみます。

@Hiroshiba Hiroshiba requested a review from a team as a code owner November 23, 2024 13:24
@voicevox-preview-pages
Copy link

voicevox-preview-pages bot commented Nov 23, 2024

🚀 プレビュー用ページを作成しました 🚀

更新時点でのコミットハッシュ:0bde968

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot reviewed 18 out of 25 changed files in this pull request and generated no suggestions.

Files not reviewed (7)
  • package.json: Language not supported
  • src/mock/engineMock/index.ts: Evaluated as low risk
  • src/mock/engineMock/singModelMock.ts: Evaluated as low risk
  • src/mock/engineMock/synthesisMock.ts: Evaluated as low risk
  • src/store/singing.ts: Evaluated as low risk
  • src/helpers/convertToWavFileData.ts: Evaluated as low risk
  • src/mock/engineMock/characterResourceMock.ts: Evaluated as low risk
Comment on lines -31 to +34
const assetsPath = path.resolve(__dirname, "assets");
const assetsPath = path.resolve(
__dirname,
"../../../src/mock/engineMock/assets",
);
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

モック画像の場所が変わったので追従しています。
そもそもモックエンジンを使えばここの書き換えはなくせるので、後々また書き換える予定です。

@Hiroshiba
Copy link
Member Author

このプルリクエスト自体は問題ないのですが、Nodeでしか動かない状況になっており、ブラウザでモックを使おうとした方が不利益に時間を使ってしまうようになるので、そっちも解決してからdraftを開けようと思います!

@Hiroshiba Hiroshiba marked this pull request as draft November 23, 2024 15:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Vuexのレイヤーでエンジンのmockを作る
1 participant